﻿using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Drawing;
using System.Linq;
using System.Runtime.Remoting.Proxies;
using System.Web;

namespace UnionistsManagement_DaLat.Areas.Admin.Models
{
    public class Account
    {
        /// <summary>
        /// Mã tài khoản
        /// </summary>
       [Display(Name = "Mã tài khoản")]
        public int ID { get; set; }
        /// <summary>
        /// Tên tài khoản
        /// </summary>
        [Required]
        [Display(Name = "Tài khoản")]
        [StringLength(20, ErrorMessage = "Vui lòng không nhập quá 20 ký tự")]
        public string Username { get; set; }
        /// <summary>
        /// Mật khẩu
        /// </summary>
        [Required]
        [Display(Name = "Mật khẩu")]
        [StringLength(50, ErrorMessage = "Vui lòng không nhập quá 50 ký tự")]
        public string Password { get; set; }
        /// <summary>
        /// Họ và tên
        /// </summary>
        [Required]
        [Display(Name = "Họ tên")]
        [StringLength(100, ErrorMessage = "Vui lòng không nhập quá 100 ký tự")]
        [DataType(DataType.Password)]
        public string FullName { get; set; }
        /// <summary>
        /// Email
        /// </summary>
        [Required]
        [Display(Name = "Email")]
        [StringLength(50, ErrorMessage = "Vui lòng không nhập quá 50 ký tự")]
        public string Email { get; set; }
        /// <summary>
        /// Lần đăng nhập cuối
        /// </summary>
        public Nullable<DateTime> LastLogin { get; set; }
        /// <summary>
        /// Khóa tài khoản
        /// </summary>
        public bool IsLock { get; set; }
        /// <summary>
        /// Cho phép hoạt đọng
        /// </summary>
        [Display(Name = "Hiển thị")]
        public bool IsEnable { get; set; }

        /// <summary>
        /// Chức vụ
        /// </summary>
        [Display(Name = "Chức vụ")]
        public virtual Role Role { get; set; }


        /// <summary>
        /// Đoàn viên
        /// </summary>
        public virtual Unionist Unionist { get; set; }

    }


    public class Role
    {
        public Role()
        {
            Accounts = new List<Account>();
        }
        /// <summary>
        /// Mã chức vụ
        /// </summary>
        [Display(Name = "Mã chức vụ")]
        public int ID { get; set; }
        /// <summary>
        /// Tên chức vụ
        /// </summary>
        [Required]
        [Display(Name = "Tên chức vụ")]
        [StringLength(50, ErrorMessage = "Vui lòng không nhập quá 50 ký tự")]
        public string RoleName { get; set; }
        /// <summary>
        /// Cho phép hiển thị
        /// </summary>
        [Display(Name = "Hiển thị")]
        public bool IsEnable { get; set; }
        /// <summary>
        /// Danh sách tài khoản
        /// </summary>
        public virtual ICollection<Account> Accounts { get; set; }
    }


    public class FunctionCatalog
    {
        public FunctionCatalog()
        {
            Functions = new List<Function>();
        }
        public int ID { get; set; }
        public string Name { get; set; }

        public virtual ICollection<Function> Functions { get; set; } 
    }



    public class Function
    {
        /// <summary>
        /// Mã chức năng
        /// </summary>
        [Display(Name = "Mã")]
        public int ID { get; set; }
        /// <summary>
        /// Mô tả
        /// </summary>
        [Required]
        [Display(Name = "Mô tả")]
        [StringLength(50, ErrorMessage = "Vui lòng không nhập quá 50 ký tự")]
        public string Name { get; set; }
        /// <summary>
        /// Tên các chức năng
        /// </summary>
        [Required]
        [Display(Name = "Tên chức năng")]
        [StringLength(50, ErrorMessage = "Vui lòng không nhập quá 50 ký tự")]
        public string FunctionName { get; set; }

        /// <summary>
        /// Cho phép hiển thị
        /// </summary>
        [Display(Name = "Hiển thị")]
        public bool IsEnable { get; set; }

        public virtual FunctionCatalog FunctionCatalog { get; set; }
    }


    public class Access 
    {
        /// <summary>
        /// Mã
        /// </summary>
        public int ID { get; set; }
        /// <summary>
        /// Chức năng
        /// </summary>
        [Display(Name = "Chức năng")]
        public virtual Function Function { get; set; } 
        /// <summary>
        /// Quyền được truy cập
        /// </summary>
        [Display(Name = "Chức vụ")]
        public virtual Role Role { get; set; } 
    }



    public class LoginModel
    {
        [Display(Name = "Tài khoản")]
        [Required(ErrorMessage = "Vui lòng nhập tài khoản")]
        public string Username { get; set; }

        [Display(Name = "Mật khẩu")]
        [Required(ErrorMessage = "Vui lòng nhập mật khẩu")]
        [DataType(DataType.Password)]
        public string Password { get; set; }


        [Display(Name = "Ghi nhớ tôi vào")]
        public Nullable<bool> RememberMe { get; set; }
    }



    public class RegisterModel
    {
       
        [Required]
        [Display(Name = "Tài khoản")]
        [StringLength(20, ErrorMessage = "Vui lòng không nhập quá 20 ký tự")]
        public string Username { get; set; }
       
        [Required]
        [Display(Name = "Mật khẩu")]
        [StringLength(50, ErrorMessage = "Vui lòng không nhập quá 50 ký tự")]
        [DataType(DataType.Password)]
        public string Password { get; set; }

        [Required]
        [Display(Name = "Nhập lại mật khẩu")]
        [StringLength(50, ErrorMessage = "Vui lòng không nhập quá 50 ký tự")]
        [DataType(DataType.Password)]
        public string ConfirmPassword { get; set; }

        
        [Required]
        [Display(Name = "Họ tên")]
        [StringLength(100, ErrorMessage = "Vui lòng không nhập quá 100 ký tự")]
        public string FullName { get; set; }
        
        [Required]
        [Display(Name = "Email")]
        [StringLength(50, ErrorMessage = "Vui lòng không nhập quá 50 ký tự")]
        public string Email { get; set; }
     
        /// <summary>
        /// Cho phép hoạt đọng
        /// </summary>
        [Display(Name = "Hiển thị")]
        public bool IsEnable { get; set; }

        /// <summary>
        /// Chức vụ
        /// </summary>
        [Display(Name = "Chức vụ")]
        public virtual Role Role { get; set; }


        /// <summary>
        /// Đoàn viên
        /// </summary>
        public virtual Unionist Unionist { get; set; }
    }
}